/*******************************************************************************
 * Copyright (c) 2008, 2019 SWTChart project.
 *
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 * 
 * Contributors:
 * yoshitaka - initial API and implementation
 *******************************************************************************/
package org.eclipse.swtchart;

/**
 * An axis container. By default, axis set has X Axis and Y axis with axis id 0.
 */
public interface IAxisSet {

	/**
	 * Creates the X axis. This method is used for multiple axes chart.
	 * 
	 * @return the axis id
	 */
	int createXAxis();

	/**
	 * Creates the Y axis. This method is used for multiple axes chart.
	 * 
	 * @return the axis id
	 */
	int createYAxis();

	/**
	 * Gets the X axis for the given id.
	 * 
	 * @param id
	 *            the axis id
	 * @return the X axis for the given axis id, or null if there is no
	 *         corresponding axis.
	 */
	IAxis getXAxis(int id);

	/**
	 * Gets the Y axis for given index.
	 * 
	 * @param id
	 *            the axis id
	 * @return the Y axis for the given axis id, or null if there is no
	 *         corresponding axis.
	 */
	IAxis getYAxis(int id);

	/**
	 * Gets the array of X axes.
	 * 
	 * @return the array of X axes
	 */
	IAxis[] getXAxes();

	/**
	 * Gets the array of Y axes.
	 * 
	 * @return the array of Y axes
	 */
	IAxis[] getYAxes();

	/**
	 * Gets the array of all axes.
	 * 
	 * @return the array of all axes
	 */
	IAxis[] getAxes();

	/**
	 * Gets the array of X axis ids.
	 * 
	 * @return the array of X axis ids
	 */
	int[] getXAxisIds();

	/**
	 * Gets the array of Y axis ids.
	 * 
	 * @return the array of Y axis ids
	 */
	int[] getYAxisIds();

	/**
	 * Deletes the X Axis for given axis id. The series on the deleted axis will
	 * be moved onto the axis id '0'. The axis whose id is '0' cannot be
	 * removed.
	 * 
	 * @param id
	 *            the axis id
	 * @throws IllegalArgumentException
	 *             if the given axis id is '0', or if there is no axis for the
	 *             given id.
	 */
	void deleteXAxis(int id);

	/**
	 * Deletes the Y Axis for given id. The series on the deleted axis will be
	 * moved onto the axis id '0'. The axis whose id is '0' cannot be removed.
	 * 
	 * @param id
	 *            the axis id
	 * @throws IllegalArgumentException
	 *             if the given axis id is '0', or if there is no axis for the
	 *             given id.
	 */
	void deleteYAxis(int id);

	/**
	 * Adjusts the axis range of all axes.
	 */
	void adjustRange();

	/**
	 * Zooms in all axes.
	 */
	void zoomIn();

	/**
	 * Zooms out all axes.
	 */
	void zoomOut();
}